home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / pj64.arc / MOUSE.PAS < prev    next >
Pascal/Delphi Source File  |  1988-12-16  |  5KB  |  167 lines

  1. UNIT MOUSE;
  2.  
  3.   INTERFACE
  4.  
  5.   Uses Dos;
  6.  
  7.   Const
  8.     Mouse = $33;
  9.     GraphicsCursorScreenMask : array[1..16] of word =
  10.         ($FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,
  11.          $FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF);
  12.     GraphicsCursorShapeMask : array[1..16] of word =
  13.         ($0000,$0000,$0080,$01C0,$03E0,$07F0,$0FF8,$3FFB,
  14.          $0FF8,$07F0,$03E0,$01C0,$0080,$0000,$0000,$0000);
  15.     Buttons : integer = 0;
  16.  
  17.   Var
  18.     Regs : Registers;
  19.     MouseAvail,SoftCursorHidden : boolean;
  20.     MouseButtons : integer;
  21.     Function InitializeMouse : integer;
  22.     Procedure ShowSoftCursor;
  23.     Procedure HideSoftCursor;
  24.     Function ReadMousePosition(var MouseX,MouseY : integer) : integer;
  25.     Procedure SetMousePosition(MouseX,MouseY : integer);
  26.     Function MouseButtonPresses(Button : integer; Var MouseX,MouseY : integer) : integer;
  27.     Function MouseButtonReleases(Button : integer; Var MouseX,MouseY : integer) : integer;
  28.     Procedure MouseCursorLimits(MinX,MaxX,MinY,MaxY : integer);
  29.     Procedure DefineGraphicsCursor(HotX,HotY : integer; Var Mask);
  30.     Procedure DefineTextCursor(HardOrSoft,First,Last : integer);
  31.     Procedure MouseMickeyCount(Var MouseX,MouseY : integer);
  32.     Procedure SetMouseUserProc(EventMask : integer; Var ProcAddr);
  33.     Procedure MickeyToPixelRatio(Horiz,Vert : integer);
  34.     Procedure HighSpeedThreshold(Threshold : integer);
  35.  
  36. IMPLEMENTATION
  37.  
  38.     Function InitializeMouse : integer;
  39.     begin
  40.       Regs.AX := 0;
  41.       Intr(Mouse,Regs);
  42.       MouseAvail := Regs.AX = 65535;
  43.       if MouseAvail then InitializeMouse := Regs.BX else
  44.         InitializeMouse := 0;
  45.     end;
  46.  
  47.     Procedure ShowSoftCursor;
  48.     begin
  49.       Regs.AX := 1;
  50.       Intr(Mouse,Regs);
  51.       SoftCursorHidden := false;
  52.     end;
  53.  
  54.     Procedure HideSoftCursor;
  55.     begin
  56.       Regs.AX := 2;
  57.       Intr(Mouse,Regs);
  58.       SoftCursorHidden := true;
  59.     end;
  60.  
  61.     Function ReadMousePosition { (var MouseX,MouseY : integer) } : integer;
  62.     begin
  63.       Regs.AX := 3;
  64.       Intr(Mouse,Regs);
  65.       MouseX := succ(Regs.CX div 8);
  66.       MouseY := succ(Regs.DX div 8);
  67.       Intr(Mouse,Regs);
  68.       ReadMousePosition := Regs.BX
  69.     end;
  70.  
  71.     Procedure SetMousePosition { (MouseX,MouseY : integer) } ;
  72.     begin
  73.       Regs.AX := 4;
  74.       Regs.CX := pred(MouseX * 8);
  75.       Regs.DX := pred(MouseY * 8);
  76.       Intr(Mouse,Regs);
  77.     end;
  78.  
  79.     Function MouseButtonPresses { (Button : integer; Var MouseX,MouseY : integer) } :
  80.                                 integer;
  81.     begin
  82.       Regs.AX := 5;
  83.       Regs.BX := Button;
  84.       Intr(Mouse,Regs);
  85.       MouseX := succ(Regs.CX div 8);
  86.       MouseY := succ(Regs.DX div 8);
  87.       MouseButtonPresses := Regs.AX;
  88.     end;
  89.  
  90.     Function MouseButtonReleases { (Button : integer; Var MouseX,MouseY : integer) } :
  91.                                  integer;
  92.     begin
  93.       Regs.AX := 6;
  94.       Regs.BX := Button;
  95.       Intr(Mouse,Regs);
  96.       MouseX := succ(Regs.CX div 8);
  97.       MouseY := succ(Regs.DX div 8);
  98.       MouseButtonReleases := Regs.AX;
  99.     end;
  100.  
  101.     Procedure MouseCursorLimits { (MinX,MaxX,MinY,MaxY : integer) } ;
  102.     begin
  103.       Regs.AX := 7;
  104.       Regs.CX := pred(MinX * 8);
  105.       Regs.DX := pred(MaxX * 8);
  106.       Intr(Mouse,Regs);
  107.       Regs.AX := 8;
  108.       Regs.CX := pred(MinY * 8);
  109.       Regs.DX := pred(MaxY * 8);
  110.       Intr(Mouse,Regs);
  111.     end;
  112.  
  113.     Procedure DefineGraphicsCursor { (HotX,HotY : integer; Var Mask) } ;
  114.     begin
  115.       Regs.AX := 9;
  116.       Regs.BX := HotX;
  117.       Regs.CX := HotY;
  118.       Regs.DX := ofs(mask);
  119.       Regs.ES := seg(mask);
  120.       Intr(Mouse,Regs);
  121.     end;
  122.  
  123.     Procedure DefineTextCursor { (HardOrSoft,First,Last : integer) } ;
  124.     begin
  125.       Regs.AX := 10;
  126.       Regs.BX := HardOrSoft;
  127.       Regs.CX := First;
  128.       Regs.DX := Last;
  129.       Intr(Mouse,Regs);
  130.     end;
  131.  
  132.     Procedure MouseMickeyCount { (Var MouseX,MouseY : integer) };
  133.     begin
  134.       Regs.AX := 11;
  135.       Intr(Mouse,Regs);
  136.       MouseX := Regs.CX;
  137.       MouseY := Regs.DX;
  138.     end;
  139.  
  140.     Procedure SetMouseUserProc { (EventMask : integer; Var ProcAddr) };
  141.     begin
  142.       Regs.AX := 12;
  143.       Regs.CX := EventMask;
  144.       Regs.DX := ofs(ProcAddr);
  145.       Regs.ES := seg(ProcADDr);
  146.       Intr(Mouse,Regs);
  147.     end;
  148.  
  149.     Procedure MickeyToPixelRatio { (Horiz,Vert : integer) } ;
  150.     begin
  151.       Regs.AX := 15;
  152.       Regs.CX := Horiz;
  153.       Regs.DX := Vert;
  154.       Intr(Mouse,Regs);
  155.     end;
  156.  
  157.     Procedure HighSpeedThreshold { (Threshold : integer) } ;
  158.     begin
  159.       Regs.AX := 19;
  160.       Regs.DX := Threshold;
  161.       Intr(Mouse,Regs);
  162.     end;
  163.  
  164. begin
  165.   Buttons := InitializeMouse;
  166. end.
  167.